#pragma once
#include <fstream>
#include "io_module.h"

namespace nnse
{
	// Forward Declarations
		class io_module;
		template <class T> ref class problem_solver_core;
		template <class T, class U> ref class problem;
		template <class T, class U> ref class solver;
		template <class T, class U> ref class MLP;
		template <class T, class U> ref class layer;
		template <class T, class U> ref class input_layer;
		template <class T, class U> ref class hidden_layer;
		template <class T, class U> ref class output_layer;
		template <class T, class U> ref class neuron;
		template <class T, class U> ref class input_neuron;
		template <class T, class U> ref class bias_unit;
		template <class T, class U> ref class hidden_neuron;
		template <class T, class U> ref class output_neuron;
		template <class T, class U> ref class dendrite;
	// Unions
		union four_byte_int
		{
			char c[4];
			unsigned int i;
		};
	// Worker Functions
		void byte_swap(four_byte_int& number);
}

namespace SimpleGUI
{
	// Forward Declarations
		template <class T, class U> ref class Problem;
		template <class T, class U> ref class CreateProblemForm;
		template <class T, class U> ref class Solver;
		template <class T, class U> ref class Input;
		template <class T, class U> ref class Output;
		template <class T, class U> ref class Target;
		template <class T, class U> ref class MLP;
		template <class T, class U> ref class Layer;
		template <class T, class U> ref class Neuron;
		template <class T, class U> ref class Dendrite;
}
